#pragma once
#include <QObject>

#include "RsgisPortal.h"

#include "RsGisLibSegClump.h"
#include "RsGisLibSegRMSmallClumpStepwise.h"
#include "RsGisLibSegLabPixFromClusCen.h"
#include "RsGisLibSegElimiSinglePixels.h"
#include "RsGisLibSegRelabelClumps.h"
#include "RsGisLibSegMeanImage.h"
#include "RsGisLibSegUnionofClumps.h"
#include "RsGisLibSegMergeSegTiles.h"
#include "RsGisLibSegFindTileBordMask.h"
#include "RsGisLibSegMergeClumpImg.h"
#include "RsGisLibSegRMSmallClumps.h"
#include "RsGisLibSegRandColourClumps.h"
#include "RsGisLibSegGenReguGrid.h"
#include "RsGisLibSegIncluCluReg.h"
#include "RsGisLibSegMerSegtoNeigh.h"
#include "RsGisLibSegDropSeleClumps.h"
#include "RsGisLibSegMerClumEquiVal.h"

class RsGisLibCMDSegmentation : public QObject
{
	Q_OBJECT
public:
	RsGisLibCMDSegmentation(RsgisPortal* Port);
	~RsGisLibCMDSegmentation();
	RsgisPortal* ClientPort;

public:
	RsGisLibSegClump* rsgisSegClump;
	RsGisLibSegRMSmallClumpStepwise* rsgisSegRMSmallClumpStepwise;
	RsGisLibSegLabPixFromClusCen* rsgisSegLabPixFromClusCen;
	RsGisLibSegElimiSinglePixels* rsgisSegElimiSinglePixels;
	RsGisLibSegRelabelClumps* rsgisSegRelabelClumps;
	RsGisLibSegMeanImage* rsgisSegMeanImage;
	RsGisLibSegUnionofClumps* rsgisSegUnionofClumps;
	RsGisLibSegMergeSegTiles* rsgisSegMergeSegTiles;
	RsGisLibSegFindTileBordMask* rsgisSegFindTileBordMask;
	RsGisLibSegMergeClumpImg* rsgisSegMergeClumpImg;
	RsGisLibSegRMSmallClumps* rsgisSegRMSmallClumps;
	RsGisLibSegRandColourClumps* rsgisSegRandColourClumps;
	RsGisLibSegGenReguGrid* rsgisSegGenReguGrid;
	RsGisLibSegIncluCluReg* rsgisSegIncluCluReg;
	RsGisLibSegMerSegtoNeigh* rsgisSegMerSegtoNeigh;
	RsGisLibSegDropSeleClumps* rsgisSegDropSeleClumps;
	RsGisLibSegMerClumEquiVal* rsgisSegMerClumEquiVal;

public slots:
	void SegClump();
	void SegRMSmallClumpStepwise();
	void SegLabPixFromClusCen();
	void SegElimiSinglePixels();
	void SegRelabelClumps();
	void SegMeanImage();
	void SegUnionofClumps();
	void SegMergeSegTiles();
	void SegFindTileBordMask();
	void SegMergeClumpImg();
	void SegRMSmallClumps();
	void SegRandColourClumps();
	void SegGenReguGrid();
	void SegIncluCluReg();
	void SegMerSegtoNeigh();
	void SegDropSeleClumps();
	void SegMerClumEquiVal();
};
